package com.hyz.appalive;

import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v4.app.NotificationManagerCompat;

import java.util.Set;

import cn.jpush.android.service.DaemonService;


/**
 * 思路：
 * 1.提高返回后、熄屏后的oom_adj
 * 2.死后自己拉起
 * 3.通过别的应用和推送等手段拉起
 *
 * 注意事项：
 * 1.这里两种service-->BindSysService和DaemoService都是用的提高进程优先级的办法保活的。
 * 2.还需要被杀死后唤醒
 */
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        startServicess();
//        startBindSystemServicess();
//        sendBaiduAppBroadCast();
//        startPushService();
//        androidWay();
        pushSDK();
    }

    private void pushSDK() {

    }

    /**
     * 通过技术方式
     * 5.0以前双进程守护
     * 5.0以后JobSchedulerWay
     */
    private void androidWay() {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
//            JobSchedulerWay();
            JobSchedulerWay2();
        }else {
            twoProcessWay();
        }
    }

    /**
     * 这样使用JobScheduler
     * recent里杀、设置里强行停止。都能启动起来
     */
    private void JobSchedulerWay2() {
        JobSchedulerManager.getJobSchedulerInstance(this).startJobScheduler();
    }

    /**
     * 5.0以上这种保活针对recent关闭有效
     */
    private void JobSchedulerWay() {
        Intent intent = new Intent();
        intent.setClass(MainActivity.this, JobHandlerService.class);
        startService(intent);
    }

    /**
     * 在4.4的nexus中亲测有效，但recent键杀死起不来。
     */
    private void twoProcessWay() {
        startService(new Intent(this , LocalService.class));
        startService(new Intent(this , RemoteService.class));
    }

    /**
     * 使用推送唤醒。测试失败
     */
    private void startPushService() {
        Intent i = new Intent(this , DaemonService.class);
        startService(i);
    }

    /**
     * 用打开百度、爱奇艺时唤醒app方法。测试失败
     */
    private void sendBaiduAppBroadCast() {
        Intent intent = new Intent();
        //设置广播的名字（设置Action）
        intent.setAction("com.baidu.android.pushservice.action.METHOD");
        sendBroadcast(intent);
    }

    /**
     * NotificationListenerService 只要注册，然后设置里打开就行。
     * 不需要启动。
     */
    private void startBindSystemServicess() {

        boolean b = checkPermisssss();
        if(!b){
            String string = Settings.Secure.getString(getContentResolver(),
                    "enabled_notification_listeners");
            System.out.println("zyf 已经允许使用通知权的应用:" + string);
            // 数据库中保存的格式：包名/服务名:包名/服务名，如：
            // com.example.notification/com.example.notification.NotificationService
            // :com.example.smartface/com.example.smartface.notification.SmartFaceListenerService
            if (!string.contains(BindSysService.class.getName())) {
                startActivity(new Intent(
                        "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
            }
        }
    }

    /**
     * 检查是否有NotificationListenerService权限，
     * 三星c7上 单独打开一个设置
     * @return
     */
    private boolean checkPermisssss() {
        Set<String> packageNames = NotificationManagerCompat.getEnabledListenerPackages(this);
        if (packageNames.contains(this.getPackageName())) {
            return true;
        }
        return false;
    }

    private void startServicess() {
        Intent i = new Intent(this, DaemoService.class);
        startService(i);
    }
}
